package br.com.localfloripa.scheduling;

import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;

import javax.inject.Inject;
import javax.inject.Named;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import br.com.localfloripa.dao.MensagemDao;
import br.com.localfloripa.entities.Email;
import br.com.localfloripa.entities.FormatoEmail;
import br.com.localfloripa.entities.Mensagem;
import br.com.localfloripa.util.MailUtils;

@Component("messageWorker")
public class MessageWorker implements Worker {
	
	public static final Logger log = LoggerFactory.getLogger(MessageWorker.class);
	
	@Inject
	@Named("mensagemDao")
	private MensagemDao mensagemDao;

	@Async
	@Override
	public void periodicalWork() throws Exception {
		
		/** Encaminha mensagens que ainda não foram enviadas **/
		log.info("MESSAGE WORKER - "+Calendar.getInstance().getTime());
		ResourceBundle bundle = ResourceBundle.getBundle("messages.MessageBundle");
		List<Mensagem> mensagens = mensagemDao.listMensagensEncaminhar();
		for (Mensagem mensagem: mensagens) {
			
			Email email = new Email();
			email.setTitulo(bundle.getString("message.email.title"));
			
			Map<String, String> destinos = new HashMap<String, String>();
			destinos.put(mensagem.getAnuncio().getCliente().getPessoa().getNome(), mensagem.getAnuncio().getCliente().getEmail());
			if (mensagem.getAnuncio().getRepresentante() != null)
				destinos.put(mensagem.getAnuncio().getRepresentante().getPessoa().getNome(),mensagem.getAnuncio().getRepresentante().getEmail());							
			email.setDestinatarios(destinos);			
			MessageFormat formatter = new MessageFormat(bundle.getString("message.eamil.body"));
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");  
			Object[] messageArguments = {  dateFormat.format(mensagem.getDataEnvio()),mensagem.getAnuncio().getContato().getPessoa().getNome(),
					mensagem.getNome(),mensagem.getEmail(),mensagem.getDescricao() };
			email.setCorpo(formatter.format(messageArguments));
			MailUtils.sendMail(email, FormatoEmail.HTML);	
			
			mensagem.setEncaminhado(true);
			mensagemDao.merge(mensagem);
		}		

	}

	@Override
	public void dailyWork() throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void weeklyWork() throws Exception {
		// TODO Auto-generated method stub

	}

}
